package br.com.leopard.erp.gym.web.session;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;

import br.com.leopard.erp.gym.bean.generic.AbstractCRUDBean;
import br.com.leopard.erp.gym.mapeamento.base_sistema.AbstractPersistenceClass;
import br.com.leopard.erp.gym.session.UsuarioSession;
import br.com.leopard.erp.gym.web.util.NomeClasseUtil;
import br.com.leopard.erp.gym.web.util.StatusPagina;

@SessionScoped
@ManagedBean(name = "CRUDSession")
public class CRUDSession {

	@Inject
	private UsuarioSession session;

	@ManagedProperty(value = "#{usuarioNavegacaoSession}")
	private UsuarioNavegacaoSession usuarioNavegacaoSession;

	private AbstractCRUDBean<?, ?> crudEmExibicao;

	public AbstractCRUDBean<?, ?> getCrudEmExibicao() {
		return crudEmExibicao;
	}

	public void setCrudEmExibicao(AbstractCRUDBean<?, ?> crudEmExibicao) {
		this.crudEmExibicao = crudEmExibicao;
	}

	public AbstractPersistenceClass getRegistroEmSelecao() {
		return crudEmExibicao.getRegistroSelecionado();
	}

	public boolean quadroInformativosGeraisRendered() {
		if (crudEmExibicao == null || crudEmExibicao.getStatus() == StatusPagina.CADASTRAR || crudEmExibicao.getRegistroSelecionado() == null) {
			return false;
		}

		return true;
	}

	public boolean acoesCRUDRendered() {
		if (crudEmExibicao == null) {
			return false;
		}

		if (usuarioNavegacaoSession.isHome()) {
			return false;
		}

		if (crudEmExibicao.getStatus() == StatusPagina.CADASTRAR) {
			return false;
		}

		return true;
	}

	public boolean isLinkCadastrarRendered() {
		String str = NomeClasseUtil.getNomePermissao("cadastrar", crudEmExibicao.getClasse());

		return crudEmExibicao.getStatus() == StatusPagina.LISTAR && session.isPermissaoUsuarioConcedida(str);
	}

	public boolean isLinkEditarRendered() {
		String str = NomeClasseUtil.getNomePermissao("editar", crudEmExibicao.getClasse());

		return crudEmExibicao.getStatus() == StatusPagina.LISTAR && session.isPermissaoUsuarioConcedida(str);
	}

	public boolean isLinkExcluirRendered() {
		String str = NomeClasseUtil.getNomePermissao("excluir", crudEmExibicao.getClasse());

		return crudEmExibicao.getStatus() == StatusPagina.LISTAR && session.isPermissaoUsuarioConcedida(str);
	}

	public boolean isLinkAtivarRendered() {
		String str = NomeClasseUtil.getNomePermissao("ativar", crudEmExibicao.getClasse());

		return crudEmExibicao.getStatus() == StatusPagina.LISTAR && session.isPermissaoUsuarioConcedida(str);
	}

	public boolean isLinkDesativarRendered() {
		String str = NomeClasseUtil.getNomePermissao("desativar", crudEmExibicao.getClasse());

		return crudEmExibicao.getStatus() == StatusPagina.LISTAR && session.isPermissaoUsuarioConcedida(str);
	}

	public boolean isLinkDadosGeraisRendered() {
		if (crudEmExibicao.getStatus() == StatusPagina.CADASTRAR) {
			return false;
		}

		return true;
	}

	public boolean isGrupoPersistenciaRendered() {
		if (crudEmExibicao.getStatus() != StatusPagina.LISTAR) {
			return true;
		}

		return false;
	}

	public boolean isButtonSalvarRendered() {
		String str = NomeClasseUtil.getNomePermissao("salvar", crudEmExibicao.getClasse());

		return crudEmExibicao.getStatus() == StatusPagina.CADASTRAR && session.isPermissaoUsuarioConcedida(str);
	}

	public UsuarioNavegacaoSession getUsuarioNavegacaoSession() {
		return usuarioNavegacaoSession;
	}

	public void setUsuarioNavegacaoSession(UsuarioNavegacaoSession usuarioNavegacaoSession) {
		this.usuarioNavegacaoSession = usuarioNavegacaoSession;
	}
}
